NGINX 1.15.2でSSLプロトコルと非SSLプロトコルを同一ポート上で実行

NGINX | 2018年7月24日

本日、NGINX Open Source 1.15.2の提供開始を発表いたします。このリリースの主な新機能の1つは、新しい$ssl_preread_protocol変数です。この変数を使用すると、TCP(stream)プロキシでトラフィックを転送する際に、SSL/TLSとその他のプロトコルを区別できます。これは、たとえばSSL/TLSサービスとSSHサービスを同じポートで実行し、ファイアウォールの制限を回避したい場合に役立ちます。

この新機能は、今後リリース予定の「NGINX Plus R16」でもNGINX Plusのお客さまにご利用いただけるようになります。

使用するタイミングと方法:$ssl_preread_protocol

When you terminate and decrypt SSL/TLS traffic, with either the httpまたはstreamモジュールでSSL/TLSトラフィックを終端して復号する場合、$ssl_protocol(http、stream)変数には、クライアントが使用するSSLまたはTLSのバージョンが格納されます。ただし、streamモジュールで基本的なTCPプロキシまたはロードバランサーを実装し、SSL/TLSトラフィックを復号せずにそのまま転送したい場合もあります。

The stream_ssl_prereadモジュールは、SSLまたはTLS接続の最初のClientHelloメッセージを検査し、接続の管理に使用できる複数の値を抽出します。リリース1.15.2で追加された$ssl_preread_protocol変数は、client_versionフィールドから最新のSSL/TLSバージョン番号を取得します。ClientHelloメッセージにsupported_versions拡張が含まれている場合、変数はClientHello message, then the variable is set to TLSv1.3に設定されます。

接続でSSLまたはTLSのいずれのバージョンも使用していない場合、$ssl_preread_protocol変数は空になります。これは、接続でSSHなど、SSL/TLS以外のプロトコルが使用されていることを示します。

次の設定スニペットでは、接続で使用されているプロトコルに適したアップストリームグループの名前を$ssl_preread_protocol変数に基づいて設定するため、mapブロックで$upstream変数を使用します。その後、proxy_passディレクティブによって、リクエストが選択されたアップストリームグループに転送されます。$ssl_preread_protocol変数を機能させるには、ssl_preread onディレクティブをserverブロックに含める必要があります。

stream {    upstream ssh {
        server 192.0.2.1:22;
    }

    upstream web {
        server 192.0.2.2:443;
    }

    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" web;
    }

    # SSH and SSL on the same port
    server {
        listen 443;

        proxy_pass $upstream;
        ssl_preread on;
    }
}

この設定を有効にするには、クライアントがデフォルトのポート22ではなく、ポート443でSSHサーバーにアクセスする必要があります。たとえば、MacOSおよびLinuxに組み込まれているSSHクライアントでは、-pフラグを使用してポートを変更できます。

$ ssh ssh-server-ip-address -p 443

最新バージョンのNGINXを入手する方法

NGINXの最新バージョンは、常に公式リポジトリのmainlineブランチで入手できます。

詳細はこちら

NGINX Open Source 1.15.2には、追加の機能強化とバグ修正が含まれています。新機能の完全な一覧については、NGINX変更履歴をご覧ください。


共有

著者について

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります